// ==UserScript==
// @name	Firefox_ToolBarButtons.uc.js
// @charset	UTF-8
// Date     2019/09/21 汉化 by Ryan Lieu
// Date		2019‎/06/12 Firefox Nightly 69.0a1 document.createXULElement('toolbarbutton'); → aDocument.createXULElement('toolbarbutton'); 書き換えました。
// Date		2019‎/05/26 Firefox Nightly 69.0a1 createElement → createXULElement 書き換えました。
// Date		2019‎/02/25 ページ情報ボタンの2つあるidを同じidにするのを忘れていたので修正しました。
// Date		2019‎/02/20 タブ移動ボタンをホイールスクロールで左右のタブにフォーカスを移動(タブ切替え？)するようにしました。ズームコントロールボタンをホイールスクロールで拡大縮小するようにしました。開発ツールボタンとCookieとサイトデータを管理ボタンを追加しました。他いろいろ変更しました。
// Date		2019‎/02/04 クッキー表示 は 開発ツールを表示するようにしてみた
// Date		2019‎/02/02 idの重複修正 クッキー表示の修正
// Date		2018‎/07/10 ボタンを追加+いろいろ変更しました。
// Date		2018‎/05/03 アクティブタブを移動するボタンを追加しました。cssの多段タブでのタブ移動に便利？ ショートカットキー(Ctrl+Shift+PageUp/PageDown)でタブ移動出来たりするので使うかはお好みで。
// Date		2018‎/04/04 拡大縮小ボタンを追加しました。
// Date		2018‎/02/05 GitHubのEndor8さんの所でボタンを増やしてくれていたのでそのまま日本語化だけしました。
// Date		2018/01/16 2017/11/09版と同じようにボタンを一つにまとめ直しました。初期導入時、再起動するボタンのみツールバーに表示するようにしてみました。
// Date		2017/11/23 ブックマーク、履歴、同期タブのサイドバーを開閉するボタンを追加して、個別に導入できるようにバラバラにしてみました。
// Date		2017/11/09 RestartFirefoxButton_Movable.uc.js をベースに、再起動+ about:config、プロファイルフォルダ、クッキーマネージャのボタンをセットにしてみました。
// @note	
// @note	初期導入時、再起動するボタンのみツールバーに表示するようにしました。
// @note	その他のボタンは、ツールバーのカスタマイズ内に格納されていると思います。
// @note	カスタマイズから追加したいボタンを好きなところに出して使ってください。
// @note	
// @note	label と tooltiptext が環境によっては、文字化けするので、 Unicode に変換してます。
// @note	
// @note	再起動
// @note	about:config
// @note	新しいタブ
// @note	プロファイルフォルダ
// @note	クッキー (Firefox60ESR)
// @note	ブックマーク サイドバー
// @note	履歴 サイドバー
// @note	同期タブ サイドバー
// @note	ブラウジングライブラリー「ダウンロード」
// @note	タブを更新(保存されているキャッシュを無視して更新)
// @note	オプション
// @note	プラグインについて
// @note	ブラウジングライブラリー「ブックマーク」
// @note	Chromeフォルダ
// @note	ページ情報
// @note	証明書マネージャー
// @note	保存されたログイン情報
// @note	履歴を削除
// @note	拡大 (Ctrl++)
// @note	縮小 (Ctrl+-)
// @note	タブ移動（左：左にタブを移動｜右：右にタブを移動｜ホイール↑：左のタブに移動｜ホイール↓：右のタブに移動）
// @note	ズームコントロール (左 or ホイール↑： 拡大｜中： リセット｜右 or ホイール↓： 縮小)
// @note	開発ツール
// @note	Cookieとサイトデータを管理(一度Firefoxのオプションを開かないとCookieやサイトデータが表示されないようです。)
// @note	カスタムボタン (左 or ホイール↑↓：新しいタブ | 中：about:config | 右：Chromeフォルダ)
// @note	
// @note	Firefox Nightly 69.0a1で動作確認しました。
// @note	http://wiki.nothing.sh/page?userChrome.js%CD%D1%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8#m5c944e2
// @note	↑ここの「サンドボックスが有効になった62以降でもuserChrome.js用スクリプトを利用する方法」を導入して確認しています。
// @note	
// @note	Firefox60ESRなどでabout:系を使いたい場合 openTrustedLinkIn ⇒ openUILinkIn に変更してください。
// @note	
// @note	Firefox61以降クッキーマネージャ？がCookieとサイトデータに変わり廃止されたのでクッキーマネージャ？を開くボタンが使え無くなります。
// @note	
// @note	Firefox68以下でこのスクリプトを使いたい場合 aDocument.createXULElement ⇒ document.createElement に変更してください。
// ==/UserScript==

(function() {
    Components.utils.import("resource:///modules/CustomizableUI.jsm");
    try {

//      重启浏览器 BrowserUtils.restartApplication(); 
        CustomizableUI.createWidget({
            id: 'restart-ToolBarButton',
            type: 'custom',
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'restart-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: "重启浏览器",
                    tooltiptext: '左键：重新启动 | 滚轮：重新启动 + 清除脚本缓存',
                    style: 'list-style-image: url("")',
                    onclick: 'if (event.button == 0) { \
                                  Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                              }; \
                              if (event.button == 1) { \
                                  Services.appinfo.invalidateCachesOnRestart(); \
                                  Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
                              };'
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      about:config
        CustomizableUI.createWidget({
            id: 'aboutconfig-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'aboutconfig-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: 'About:Config',
                    tooltiptext: '打开 About:Config',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  openTrustedLinkIn("about:config", "tab"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      新建标签页
        CustomizableUI.createWidget({
            id: 'newtab-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'newtab-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '新建标签页（后台）',
                    tooltiptext: '新建标签页（后台）',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  openTrustedLinkIn("about:newtab", "tabshifted");/*BrowserOpenTab(event);*/ \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      配置文件夹
        CustomizableUI.createWidget({
            id: 'profilefolder-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'profilefolder-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '配置文件夹',
                    tooltiptext: '在资源管理器中打开配置文件夹',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  Services.dirsvc.get("ProfD", Ci.nsIFile).launch(); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      Cookie（Firefox60ESR）
        CustomizableUI.createWidget({
            id: 'showCookies-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'showCookies-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: 'Cookie',
                    tooltiptext: '显示 Cookie',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                     window.open("chrome://browser/content/preferences/cookies.xul","cookie","chrome,dialog,centerscreen,dependent"); \
                                  }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      书签侧边栏
        CustomizableUI.createWidget({
            id: 'BookmarksSidebar-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'BookmarksSidebar-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '书签侧边栏',
                    tooltiptext: '打开/关闭书签侧边栏',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  SidebarUI.toggle("viewBookmarksSidebar"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      历史侧边栏
        CustomizableUI.createWidget({
            id: 'HistorySidebar-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'HistorySidebar-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '历史侧边栏',
                    tooltiptext: '打开/关闭历史侧边栏',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  SidebarUI.toggle("viewHistorySidebar"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      同步标签页侧边栏
        CustomizableUI.createWidget({
            id: 'viewTabsSidebar-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'viewTabsSidebar-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '同步标签页侧边栏',
                    tooltiptext: '打开/关闭同步标签页侧边栏',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  SidebarUI.toggle("viewTabsSidebar"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      其他按钮
//      我的足迹：下载项
        CustomizableUI.createWidget({
            id: 'Download-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'Download-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '我的足迹：下载项',
                    accesskey: 'D',
                    tooltiptext: '打开我的足迹：下载项',
                    style: 'list-style-image: url()',
                    oncommand: "DownloadsPanel.showDownloadsHistory();"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      我的足迹：所有书签
        CustomizableUI.createWidget({
            id: 'bookmarks-manager-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'bookmarks-manager-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '我的足迹：所有书签',
                    tooltiptext: '打开我的足迹：所有书签',
                    style: 'list-style-image: url()',
                    oncommand: "PlacesCommandHook.showPlacesOrganizer('AllBookmarks');"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      强制刷新（忽略缓存）
        CustomizableUI.createWidget({
            id: 'reload-skip-cache-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'reload-skip-cache-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '强制刷新（忽略缓存）',
                    tooltiptext: '强制刷新当前页面（忽略缓存）',
                    style: 'list-style-image: url()',
                    oncommand: "BrowserReloadSkipCache();"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      选项
        CustomizableUI.createWidget({
            id: 'Einstellungen-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'Einstellungen-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '选项',
                    tooltiptext: '打开浏览器选项',
                    style: 'list-style-image: url()',
                    oncommand: "openPreferences();"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      查看已安装插件
        CustomizableUI.createWidget({
            id: 'aboutplugins-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'aboutplugins-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '已安装插件',
                    tooltiptext: '查看已安装插件',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  openTrustedLinkIn("about:plugins", "tab"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      Chrome 文件夹
        CustomizableUI.createWidget({
            id: 'Open-Chrome-Folder-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'Open-Chrome-Folder-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: 'Chrome 文件夹',
                    tooltiptext: '打开 Chrome 文件夹',
                    style: 'list-style-image: url()',
                    oncommand: 'Services.dirsvc.get("UChrm", Ci.nsIFile).launch();'
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      页面信息
        CustomizableUI.createWidget({
            id: 'context-viewinfo-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'context-viewinfo-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '页面信息',
                    accesskey: 'i',
                    tooltiptext: '查看页面详细信息',
                    style: 'list-style-image: url()',
                    command: "View:PageInfo"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      证书管理器
        CustomizableUI.createWidget({
            id: 'context-viewcert-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'context-viewcert-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '证书管理器',
                    tooltiptext: '打开证书管理器',
                    style: 'list-style-image: url()',
                    oncommand: "window.open('chrome://pippki/content/certManager.xul', 'mozilla:certmanager', 'chrome,resizable=yes,all,width=830,height=400');"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      已保存的登录信息
        CustomizableUI.createWidget({
            id: 'context-viewpassword-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'context-viewpassword-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '已保存的登录信息',
                    tooltiptext: '打开已保存的登录信息',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  window.open("chrome://passwordmgr/content/passwordManager.xul","PasswordManager","chrome,dialog,centerscreen,dependent,resizable"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      清除历史记录
        CustomizableUI.createWidget({
            id: 'context-deletehistory-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'context-deletehistory-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '清除历史记录',
                    tooltiptext: '清除最近的历史记录',
                    style: 'list-style-image: url()',
                    oncommand: "window.open('chrome://browser/content/sanitize.xul', 'Toolkit:SanitizeDialog', 'chrome,resizable=yes');"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      放大 (Ctrl++)
        CustomizableUI.createWidget({
            id: 'zoom-in-ToolBarbutton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'zoom-in-ToolBarbutton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '放大 (Ctrl++)',
                    tooltiptext: '放大 (Ctrl++)',
                    style: 'list-style-image: url()',
                    oncommand: "FullZoom.enlarge()"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      缩小 (Ctrl+-)
        CustomizableUI.createWidget({
            id: 'zoom-out-ToolBarbutton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'zoom-out-ToolBarbutton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '缩小 (Ctrl+-)',
                    tooltiptext: '缩小 (Ctrl+-)',
                    style: 'list-style-image: url()',
                    oncommand: "FullZoom.reduce()"
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      标签切换
        CustomizableUI.createWidget({
            id: 'moveTab-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'moveTab-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    oncontextmenu: 'return(false);',
                    label: '标签切换',
                    tooltiptext: '左：切换到左边标签 | 右：切换到右边标签 |滚轮↑：切换到左边标签 | 滚轮↓：切换到右边标签',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  gBrowser.moveTabBackward(); \
                              }; \
                              if (event.button == 2) { \
                                  gBrowser.moveTabForward(); \
                              };',
                    onwheel: 'if (event.deltaY < 0) { \
                                  gBrowser.tabContainer.advanceSelectedTab(-1, true); \
                              } else { \
                                  gBrowser.tabContainer.advanceSelectedTab(1, true); \
                              };'
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      缩放控制
        CustomizableUI.createWidget({
            id: 'zoom-control-ToolBarbutton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'zoom-control-ToolBarbutton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    oncontextmenu: 'return(false);',
                    label: '缩放控制',
                    tooltiptext: '左或滚轮↑：放大 | 按下滚轮：复位 | 右或滚轮↓：缩小',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  FullZoom.enlarge(); \
                              }; \
                              if (event.button == 1) { \
                                  FullZoom.reset(); \
                              }; \
                              if (event.button == 2) { \
                                  FullZoom.reduce(); \
                              };',
                    onwheel: 'if (event.deltaY < 0) { \
                                  FullZoom.enlarge(); \
                              } else { \
                                  FullZoom.reduce(); \
                              };'
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      管理Cookie和网站数据（除非您一次打开Firefox选项，否则打不开Cookie和网站数据）
        CustomizableUI.createWidget({
            id: 'siteDataSettings-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'siteDataSettings-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '管理Cookie和网站数据',
                    tooltiptext: '（除非您一次打开Firefox选项，否则打不开Cookie和网站数据）',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  window.open("chrome://browser/content/preferences/siteDataSettings.xul","cookie","chrome,dialog,centerscreen,dependent,resizable,width=700,height=560"); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
//      开发者工具
        CustomizableUI.createWidget({
            id: 'toggleToolbox-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'toggleToolbox-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '开发者工具',
                    tooltiptext: '打开开发者工具',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                  let ev = new KeyboardEvent("keypress", {bubbles : true, cancelable : true, keyCode:  KeyboardEvent.DOM_VK_F9, shiftKey : true }); document.getElementById("main-window").dispatchEvent(ev); \
                              }; '
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
// 窗口置顶
        CustomizableUI.createWidget({
            id: 'PinOnTop-ToolBarButton',
            type: 'custom',
            onBuild: function(aDocument) {
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                let props = {
                    id: 'PinOnTop-ToolBarButton',
                    class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                    label: '窗口置顶',
                    tooltiptext: '窗口置顶',
                    style: 'list-style-image: url()',
                    onclick: 'if (event.button == 0) { \
                                if(document.getElementById("main-window").hasAttribute("ontop")) \
                                onTop=false;else onTop=true; \
                                try { \
                                    Components.utils.import("resource://gre/modules/ctypes.jsm"); \
                                    var lib = ctypes.open("user32.dll"); \
                                    var funcActiveWindow = 0; \
                                    try { \
                                        funcActiveWindow = lib.declare("GetActiveWindow", ctypes.winapi_abi, ctypes.int32_t); \
                                    } catch (ex) { \
                                        funcActiveWindow = lib.declare("GetActiveWindow", ctypes.stdcall_abi, ctypes.int32_t); \
                                    } \
                                    if (funcActiveWindow != 0) { \
                                        var activeWindow = funcActiveWindow(); \
                                        var funcSetWindowPos = 0; \
                                        try { \
                                            funcSetWindowPos = lib.declare("SetWindowPos", \
                                                ctypes.winapi_abi, \
                                                ctypes.bool, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.uint32_t); \
                                        } catch(ex) { \
                                            funcSetWindowPos = lib.declare("SetWindowPos", \
                                                ctypes.stdcall_abi, \
                                                ctypes.bool, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.int32_t, \
                                                ctypes.uint32_t); \
                                        } \
                                        var hwndAfter = -2; \
                                        if (onTop) { \
                                            hwndAfter = -1;document.getElementById("main-window").setAttribute("ontop","true"); \
                                        } else { \
                                            document.getElementById("main-window").removeAttribute("ontop"); \
                                        } \
                                        funcSetWindowPos(activeWindow, hwndAfter, 0, 0, 0, 0, 19); \
                                    } \
                                    lib.close(); \
                                } catch (ex) { \
                                    alwaysontop_log(ex); \
                                } \
                            };'
                };
                for (let p in props)
                    toolbaritem.setAttribute(p, props[p]);
                return toolbaritem;
            }
        });
    } catch(e){};
})();